package org.htw.osgi.renderservice.essentials;

import org.osgi.framework.*;

/**
 * <p>ARenderActivator stellt das Grundgerüst eines Interceptors des
 * RenderService dar. Es muss lediglich die spezifische Methode
 * {@link IInterceptor#processRequest(javax.servlet.ServletRequest)}
 * von der erbenden Klasse implementiert werden um einen voll
 * einsetzbaren Interceptor bereitzustellen.<p>
 * 
 * <p><b>Hinweis:</b> Es handelt sich hier um einen prioritätsbasierten
 * Interceptor.</p>
 * 
 * @author  Benjamin Friedrich (<a href="mailto:benjamin_friedrich@gmx.de">mailto:benjamin_friedrich@gmx.de</a>)
 * @version 1.0  Juni 2009
 */
public abstract class ARenderActivator 
extends 			  APriorityInterceptor
implements 			  BundleActivator
{
	private IServiceFramework service;
	
	/**
	 * Konstruktor von ARenderActivator
	 * 
	 * @param priority
	 */
	public ARenderActivator(final Integer priority)
	{
		super(priority);
	}
	
	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	@Override
	public final void start(BundleContext context) throws Exception 
	{
		final ServiceReference reference = context.getServiceReference(IServiceFramework.class.getName());
		
		if(reference != null)
		{
			this.service = (IServiceFramework) context.getService(reference);		
			this.service.registerInterceptor((IInterceptor) this);
		}
		else
		{
			throw new Exception("Service " + IServiceFramework.class.getName() + " can not be resolved!");
		}
	}

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	@Override
	public final void stop(final BundleContext context) throws Exception 
	{
		if(this.service != null)
		{
			this.service.unregisterInterceptor((IInterceptor)this);
			this.service = null;
		}
	}
}